/*
 * @Author: cl
 * @Description:
 * @Date: 2023-05-28 09:29:59
 * @LastEditTime: 2023-06-01 17:49:41
 * @FilePath: \vue3scaffold\src\plugins\axios\Axios.ts
 * @LastEditors: cl
 */
import axios, { AxiosRequestConfig } from "axios";
export default class Axios {
  //定义实例
  private instance;
  constructor(config: AxiosRequestConfig) {
    this.instance = axios.create(config);
    this.interceptors();
  }

  public async myRequest<T, D = ResponseRequest<T>>(
    config: AxiosRequestConfig
  ) :Promise<D>{
    return new Promise(async (resole, reject) => {
      try {
        const response = await this.instance.request<D>(config);
        resole(response.data);
      } catch (error) {
        reject(error);
      }
    });
  }

  //拦截器
  private interceptors() {
    this.interceptorsRequest();
    this.interceptorsResponse();
  }

  private interceptorsResponse() {
    // 添加响应拦截器
    this.instance.interceptors.response.use(
      (response) => {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么
        return response;
      },
      (error) => {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        return Promise.reject(error);
      }
    );
  }

  private interceptorsRequest() {
    this.instance.interceptors.request.use(
      (config) => {
        // 在发送请求之前做些什么
        return config;
      },
      (error) => {
        // 对请求错误做些什么
        return Promise.reject(error);
      }
    );
  }
}
